// //1.对自身调用
// function f1(para1, para2) {
//     f1(para1, para2);
// }
// //2.间接调用自身
// function f1() {
//     f2();
// }

// function f2() {
//     f1();
// }

// //递归一定要有基线

// function test(para) {
//     //定义一个基线
//     if (para == true) {

//     }
//     test
// }

//求n的阶乘
//输入：n
//输出：n!
function factorial(n) {
    //1.基线
    //2.自身调用
    //5!=5*4!
    if (n === 1) {
        return n;
    }
    return n * factorial(n - 1);

}
// console.log(factorial(3));

function fibo(n) {
    //初始化，存储fibonacci的前两个数字
    const cache = [0, 1];
    if (cache[n] != null) {
        return cache[n];
    }
    //递归，调用自身
    // if (n === 1 || n === 2) { return 1 }
    return cache[n] = fibo(n - 1) + fibo(n - 2)
}
console.log(fibo(19))

function reserve(head) {
    if (head.next == null) {
        //返回head;
        return head;
    }
    //调用自身
    let restNode = reserve(head.next);
    //逆置功能
    let current = head.next;
    current.next = head;
    head.next = undefined;
    this.head = restNode;
    return this.head;
}
// reserve(list)